home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / javax / swing / TablePrintable.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.0 KB  |  242 lines

  1. package javax.swing;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.Graphics;
  6. import java.awt.Graphics2D;
  7. import java.awt.Rectangle;
  8. import java.awt.Shape;
  9. import java.awt.geom.AffineTransform;
  10. import java.awt.geom.Rectangle2D;
  11. import java.awt.print.PageFormat;
  12. import java.awt.print.Printable;
  13. import java.awt.print.PrinterException;
  14. import java.text.MessageFormat;
  15. import javax.swing.JTable.PrintMode;
  16. import javax.swing.table.JTableHeader;
  17. import javax.swing.table.TableColumnModel;
  18.  
  19. class TablePrintable implements Printable {
  20.    private JTable table;
  21.    private JTableHeader header;
  22.    private TableColumnModel colModel;
  23.    private int totalColWidth;
  24.    private JTable.PrintMode printMode;
  25.    private MessageFormat headerFormat;
  26.    private MessageFormat footerFormat;
  27.    private int last = -1;
  28.    private int row = 0;
  29.    private int col = 0;
  30.    private final Rectangle clip = new Rectangle(0, 0, 0, 0);
  31.    private final Rectangle hclip = new Rectangle(0, 0, 0, 0);
  32.    private final Rectangle tempRect = new Rectangle(0, 0, 0, 0);
  33.    private static final int H_F_SPACE = 8;
  34.    private static final float HEADER_FONT_SIZE = 18.0F;
  35.    private static final float FOOTER_FONT_SIZE = 12.0F;
  36.    private Font headerFont;
  37.    private Font footerFont;
  38.  
  39.    public TablePrintable(JTable var1, JTable.PrintMode var2, MessageFormat var3, MessageFormat var4) {
  40.       this.table = var1;
  41.       this.header = var1.getTableHeader();
  42.       this.colModel = var1.getColumnModel();
  43.       this.totalColWidth = this.colModel.getTotalColumnWidth();
  44.       if (this.header != null) {
  45.          this.hclip.height = this.header.getHeight();
  46.       }
  47.  
  48.       this.printMode = var2;
  49.       this.headerFormat = var3;
  50.       this.footerFormat = var4;
  51.       this.headerFont = var1.getFont().deriveFont(1, 18.0F);
  52.       this.footerFont = var1.getFont().deriveFont(0, 12.0F);
  53.    }
  54.  
  55.    public int print(Graphics var1, PageFormat var2, int var3) throws PrinterException {
  56.       int var4 = (int)var2.getImageableWidth();
  57.       int var5 = (int)var2.getImageableHeight();
  58.       if (var4 <= 0) {
  59.          throw new PrinterException("Width of printable area is too small.");
  60.       } else {
  61.          Object[] var6 = new Object[]{new Integer(var3 + 1)};
  62.          String var7 = null;
  63.          if (this.headerFormat != null) {
  64.             var7 = this.headerFormat.format(var6);
  65.          }
  66.  
  67.          String var8 = null;
  68.          if (this.footerFormat != null) {
  69.             var8 = this.footerFormat.format(var6);
  70.          }
  71.  
  72.          Rectangle2D var9 = null;
  73.          Rectangle2D var10 = null;
  74.          int var11 = 0;
  75.          int var12 = 0;
  76.          int var13 = var5;
  77.          if (var7 != null) {
  78.             var1.setFont(this.headerFont);
  79.             var9 = var1.getFontMetrics().getStringBounds(var7, var1);
  80.             var11 = (int)Math.ceil(var9.getHeight());
  81.             var13 = var5 - (var11 + 8);
  82.          }
  83.  
  84.          if (var8 != null) {
  85.             var1.setFont(this.footerFont);
  86.             var10 = var1.getFontMetrics().getStringBounds(var8, var1);
  87.             var12 = (int)Math.ceil(var10.getHeight());
  88.             var13 -= var12 + 8;
  89.          }
  90.  
  91.          if (var13 <= 0) {
  92.             throw new PrinterException("Height of printable area is too small.");
  93.          } else {
  94.             double var14 = (double)1.0F;
  95.             if (this.printMode == PrintMode.FIT_WIDTH && this.totalColWidth > var4) {
  96.                assert var4 > 0;
  97.  
  98.                assert this.totalColWidth > 1;
  99.  
  100.                var14 = (double)var4 / (double)this.totalColWidth;
  101.             }
  102.  
  103.             assert var14 > (double)0.0F;
  104.  
  105.             while(this.last < var3) {
  106.                if (this.row >= this.table.getRowCount() && this.col == 0) {
  107.                   return 1;
  108.                }
  109.  
  110.                int var16 = (int)((double)var4 / var14);
  111.                int var17 = (int)((double)(var13 - this.hclip.height) / var14);
  112.                this.findNextClip(var16, var17);
  113.                ++this.last;
  114.             }
  115.  
  116.             Graphics2D var19 = (Graphics2D)var1;
  117.             var19.translate(var2.getImageableX(), var2.getImageableY());
  118.             if (var8 != null) {
  119.                AffineTransform var20 = var19.getTransform();
  120.                var19.translate(0, var5 - var12);
  121.                this.printText(var19, var8, var10, this.footerFont, var4);
  122.                var19.setTransform(var20);
  123.             }
  124.  
  125.             if (var7 != null) {
  126.                this.printText(var19, var7, var9, this.headerFont, var4);
  127.                var19.translate(0, var11 + 8);
  128.             }
  129.  
  130.             this.tempRect.x = 0;
  131.             this.tempRect.y = 0;
  132.             this.tempRect.width = var4;
  133.             this.tempRect.height = var13;
  134.             var19.clip(this.tempRect);
  135.             if (var14 != (double)1.0F) {
  136.                var19.scale(var14, var14);
  137.             } else {
  138.                int var18 = (var4 - this.clip.width) / 2;
  139.                var19.translate(var18, 0);
  140.             }
  141.  
  142.             AffineTransform var21 = var19.getTransform();
  143.             Shape var22 = var19.getClip();
  144.             if (this.header != null) {
  145.                this.hclip.x = this.clip.x;
  146.                this.hclip.width = this.clip.width;
  147.                var19.translate(-this.hclip.x, 0);
  148.                var19.clip(this.hclip);
  149.                this.header.print(var19);
  150.                var19.setTransform(var21);
  151.                var19.setClip(var22);
  152.                var19.translate(0, this.hclip.height);
  153.             }
  154.  
  155.             var19.translate(-this.clip.x, -this.clip.y);
  156.             var19.clip(this.clip);
  157.             this.table.print(var19);
  158.             var19.setTransform(var21);
  159.             var19.setClip(var22);
  160.             var19.setColor(Color.BLACK);
  161.             var19.drawRect(0, 0, this.clip.width, this.hclip.height + this.clip.height);
  162.             return 0;
  163.          }
  164.       }
  165.    }
  166.  
  167.    private void printText(Graphics2D var1, String var2, Rectangle2D var3, Font var4, int var5) {
  168.       int var6;
  169.       if (var3.getWidth() < (double)var5) {
  170.          var6 = (int)(((double)var5 - var3.getWidth()) / (double)2.0F);
  171.       } else if (this.table.getComponentOrientation().isLeftToRight()) {
  172.          var6 = 0;
  173.       } else {
  174.          var6 = -((int)(Math.ceil(var3.getWidth()) - (double)var5));
  175.       }
  176.  
  177.       int var7 = (int)Math.ceil(Math.abs(var3.getY()));
  178.       var1.setColor(Color.BLACK);
  179.       var1.setFont(var4);
  180.       var1.drawString(var2, var6, var7);
  181.    }
  182.  
  183.    private void findNextClip(int var1, int var2) {
  184.       boolean var3 = this.table.getComponentOrientation().isLeftToRight();
  185.       if (this.col == 0) {
  186.          if (var3) {
  187.             this.clip.x = 0;
  188.          } else {
  189.             this.clip.x = this.totalColWidth;
  190.          }
  191.  
  192.          Rectangle var10000 = this.clip;
  193.          var10000.y += this.clip.height;
  194.          this.clip.width = 0;
  195.          this.clip.height = 0;
  196.          int var4 = this.table.getRowCount();
  197.          int var5 = this.table.getRowHeight(this.row);
  198.  
  199.          do {
  200.             var10000 = this.clip;
  201.             var10000.height += var5;
  202.             if (++this.row >= var4) {
  203.                break;
  204.             }
  205.  
  206.             var5 = this.table.getRowHeight(this.row);
  207.          } while(this.clip.height + var5 <= var2);
  208.       }
  209.  
  210.       if (this.printMode == PrintMode.FIT_WIDTH) {
  211.          this.clip.x = 0;
  212.          this.clip.width = this.totalColWidth;
  213.       } else {
  214.          if (var3) {
  215.             Rectangle var9 = this.clip;
  216.             var9.x += this.clip.width;
  217.          }
  218.  
  219.          this.clip.width = 0;
  220.          int var6 = this.table.getColumnCount();
  221.          int var7 = this.colModel.getColumn(this.col).getWidth();
  222.  
  223.          do {
  224.             Rectangle var10 = this.clip;
  225.             var10.width += var7;
  226.             if (!var3) {
  227.                var10 = this.clip;
  228.                var10.x -= var7;
  229.             }
  230.  
  231.             if (++this.col >= var6) {
  232.                this.col = 0;
  233.                break;
  234.             }
  235.  
  236.             var7 = this.colModel.getColumn(this.col).getWidth();
  237.          } while(this.clip.width + var7 <= var1);
  238.  
  239.       }
  240.    }
  241. }
  242.